package org.javamianshi.core;

/**
 * Created by IntelliJ IDEA.
 * User: Fan
 * Date: 2018/7/15
 * Time: 12:04
 */
public class IntegerTest {

    public static void main(String[] args) {

        integerParseTest();
    }

    /**
     * 诡异的数字
     * 变量名永远不要用l
     * 数字结尾永远不要用l，表示long使用L
     */
    public static void numTest(){
        System.out.println(12345+5432L);

        /**
         * 复合赋值表达式自动地将它们所执行的计算的结果
         * 转型为其左侧变量的类型
         */
        byte x = 10;
        x+=1234;
        //赋值操作数据越界导致编译错误
        //x = x+1234;
        System.out.println(x);
    }


    /**
     * 数据类型转换之比较
     */
    public static void integerParseTest(){
        Object o = null;
        Long aa = (Long) o;
        System.out.println(aa);
        /*PrintQueue printQueue = new PrintQueue();
        Thread thread[] = new Thread[10];
        for (int i=0; i<10; i++){
            thread[i] = new Thread(new Job(printQueue),"Thread "+i );
        }
        for (int i=0; i<10;i++){
            thread[i].start();
        }*/

        /**
         * == 操作符比较，如果比较的数据是基本类型，则比较他们的值，如果比较的是对象，则会比较对象的内存地址。
         *
         */
        Double i1 = 100.0;
        Double i2 = 100.0;
        Double i3 = 200.0;
        Double i4 = 200.0;
        double i5 = 100.0;
        Double i6 = new Double(100.0);
        System.out.println(i1==i2);//false
        System.out.println(i3==i4);//false
        System.out.println(i5==Double.valueOf(i1));//ture 一个是基本类型，一个是包装类型，比较之前会先把包装类型拆箱成基本类型，然后进行比较，这里是俩个double比较
        System.out.println(i1==i6);//false

        Integer d1 = 100;
        Integer d2 = 100;
        Integer d3 = 200;
        Integer d4 = 200;
        System.out.println(d1 == d2);//ture
        System.out.println(Integer.valueOf(d1) == d2);//ture
        System.out.println(d3==d4);//false

        Byte b1 = 100;
        Byte b2 = 100;
        System.out.println(Byte.valueOf(b1) == b2);//ture

        Long l1 = 100l;
        Long l2 = 100l;
        Long l3 = 200l;
        Long l4 = 200l;
        long l5 = 100;
        Long l6 = new Long(100);
        System.out.println(Long.valueOf(l1)==Long.valueOf(l2));//ture
        System.out.println(Long.valueOf(l1)==l5);//ture
        System.out.println(l5==l6);//ture
        System.out.println(l3==l4);//false


        Boolean B1 = false;
        Boolean B2 = false;
        Boolean B3 = true;
        Boolean B4 = true;
        System.out.println(Boolean.valueOf(B1) == B2);//ture
        System.out.println(B3 == B4);//ture


        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        Long h = 2L;
        /**
         * Integer、Byte、Short、Long、Character的缓存池：
         *  自动装箱会从缓存池中取对象，缓存池的区间为【-128,127】
         *  如果比较值是在这个范围内，就会从IntegerCache.cache这个数组中取出一个Integer对象返回，如果超出这个范围，
         *  就直接new一个Integer对象返回。
         *  Boolean的缓存池：[true,false]
         */
        System.out.println(c==d);//true
        System.out.println(e==f);//false
        System.out.println(e.equals(f));//true
        System.out.println(c==(a+b));//true
        System.out.println(c.equals(a+b));//true
        System.out.println(g==(a+b));//true
        System.out.println(g.equals(a+b));//false equals两边的数据类型要相同
        System.out.println(g.equals(a+h));//ture
    }



}
